// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Λαμβάνετε προμόθετα στο Spinbara Casino; Πώς να χρησιμοποιήσετε τον κωδικό προώθησης για να παίξετε καζίνο στο διαδίκτυο στην Ελλάδα – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Λαμβάνετε προμόθετα στο Spinbara Casino; Πώς να χρησιμοποιήσετε τον κωδικό προώθησης για να παίξετε καζίνο στο διαδίκτυο στην Ελλάδα
Receive promotions at Spinbara Casino; How to use the promotional code to play online casino in Greece
Πώς να λαμβάνετε προμόθετα στο Spinbara Casino; Οδηγίες χρήσης κωδικού προώθησης
Θέλετε να λαμβάνετε προμόθετα στο Spinbara Casino; Ακολουθήστε οδηγίες χρήσης του κωδικού προώθησης στον ακόλουθο τρόπο: 1. Δημιουργήστε ένα λογαριασμό στο Spinbara Casino.
2. Μετά την εγγραφή σας, συμπληρώστε τον κωδικό προώθησης στο πεδίο κωδικού προώθησης.
3. Μπορείτε να βρείτε τον κωδικό προώθησης στην ιστοσελίδα του καζινό ή από την επικοινωνία του υποστηρικτικού πελατών.
4. Έχετε τώρα ενεργοποιήσει τον κωδικό προώθησης και μπορείτε να λαμβάνετε τις προσφορές spinbara gr του Spinbara Casino.
5. Παρακαλούμε να έχετε υπόψη ότι οι προμόθετες μπορούν να είναι εξαρτημένες από το χώρο και τις συντήρησης.
6. Συνιστάμε να διαβάζετε τις συννεφώσεις και τις προϋποθέσεις πριν να χρησιμοποιήσετε κανέναν κωδικό προώθησης.
7. Εάν έχετε αντικείμενα στο λογαριασμό σας, παρακαλούμε συνδεθείτε και επιβεβαιώστε την εγγραφή σας πριν να χρησιμοποιήσετε τον κωδικό προώθησης.
8. Αν έχετε αντιστοίχιση προώθησης στο λογαριασμό σας, θα λάβετε τις προμόθετες στο συγκεκριμένο παιχνίδι ή στο συγκεκριμένο περιοχή.
Τι είναι οι προσφορές του Spinbara Casino; Πώς να ενεργοποιήσετε τον κωδικό προώθησης σας
Τι είναι οι προσφορές του Spinbara Casino; Πώς να ενεργοποιήσετε τον κωδικό προώθησης σας; Αναζητούμε προσφορές και bonuses όταν επιλέγουμε ένα online καζίνο, και Spinbara Casino δεν νοιάζεται πολύ. Το Spinbara Casino προσφέρει πολλές δωρεάν γύρους, δωρεάν πενταλόγα και άλλες προσφορές. Όταν εγγραφείτε στο Spinbara Casino, μπορείτε να εισάγετε τον κωδικό προώθησης σας για να λαμβάνετε ένα προσωπικό bonus. Για να ενεργοποιήσετε τον κωδικό προώθησης σας, ακολουθήστε τα παρακάτω βήματα: 1. Δημιουργήστε ένα λογαριασμό στο Spinbara Casino. 2. Πληκτρολογήστε τον κωδικό προώθησης σας στο πεδίο προώθησης Pendant l’inscription. 3. Πληρώστε το λογαριασμό σας με το προσφερόμενο πληρωμένο τρόπο. Έτσι, μπορείτε να λαμβάνετε τις προσφορές Spinbara Casino και να απολαύσετε τις περίπλοκες του καζινού!
Λαμβάνετε προμόθετα στο διαδίκτυο καζίνο στην Ελλάδα; Χρήση κωδικού προώθησης Spinbara
Είστε στην αναζήτηση για τρόπους να λαμβάνετε προμόθετα στο διαδίκτυο καζίνο στην Ελλάδα; Το Spinbara είναι η λύση που ψάχνετε! Χρησιμοποιώντας τον κωδικό προώθησης Spinbara, μπορείτε να λαμβάνετε προσφορές και να πληρώνετε με την ασφάλεια και την ευκολία της ηλεκτρονικής σας καρτάς. Δείτε τι έχει να σας προσφέρει το Spinbara και αναζητήστε τον κωδικό προώθησης για να ξεκινήσετε τη διασκέδαση σας στο διαδίκτυο καζίνο! Μπορείτε να ληψόμεθα προμόθετα όπως δωρεάν γύροι, χρήματα προσφοράς και περισσότερα. Το Spinbara σας προσφέρει την ευκαιρία να παίξετε σε τα καλύτερα καζίνα της Ελλάδας και να λαμβάνετε προμόθετα που θα σας ενθ Aristocrat, NetEnt και άλλους γνωστούς παρόχους παιχνιδιών!
Όχι μόνο αυτό, αλλά το Spinbara σας προσφέρει επίσης την ευκαιρία να παίξετε σε πολλές γλώσσες, συμπεριλαμβανομένης της ελληνικής! Έτσι μπορείτε να παίξετε στο διαδίκτυο καζίνο σας αγαπημένο στην γλώσσα σας, ενώ λαμβάνετε προμόθετα με τη χρήση του κωδικού προώθησης Spinbara.
Το Spinbara είναι η επιλογή του καλύτερου για όλους τους φίλους της επιστήμης του καζίνο! Μην αντιμετωπίζετε περιορισμούς στο παίξιμο σας και μην αποφεύγετε τις προσφορές. Χρησιμοποιήστε τον κωδικό προώθησης Spinbara για να λαμβάνετε προμόθετα και να αναπτύξετε τη διασκέδαση σας στο διαδίκτυο καζίνο!
Πώς να χρησιμοποιήσετε τον κωδικό προώθησης στο Spinbara Casino; Λαμβάνετε όλες τις προσφορές
Στο Spinbara Casino, μπορείτε να χρησιμοποιήσετε τον κωδικό προώθησης για να λαμβάνετε όλες τις προσφορές που παρέχονται. Για να χρησιμοποιήσετε τον κωδικό προώθησης, πρέπει να το εισάγετε στο πεδίο κωδικού προώθησης κατά τη διαδικασία εγγραφής ή κατά την κάθε εντολή ανανέωσης λογαριασμού. Ο κωδικός προώθησης είναι είδικος κωδικός που παρέχεται από το καζίνο και σας επιτρέπει να λαμβάνετε προσφορές που δεν είναι διαθέσιμες για τους χρήστες οι οποίοι δεν τον έχουν εισάγει. Μπορείτε να βρείτε τον κωδικό προώθησης στην ιστοσελίδα του καζινού ή στην ε-mail που σας στάλθηκε μετά την εγγραφή σας. Ένας από τους πιο συνηθισμένους τρόπους χρήσης του κωδικού προώθησης είναι να λαμβάνετε ένα προσφοράς εισόδου δωρεάν ή να παίξετε με ένα υψηλότερο ποσοστό παίξιμο. Ένας άλλος συνηθισμένος τρόπος χρήσης του κωδικού προώθησης είναι να λαμβάνετε περισσότερες καρτέλες στο παιχνίδι σας πριν να ρίξετε την τυχην κίνηση. Στο Spinbara Casino, μπορείτε να χρησιμοποιήσετε τον κωδικό προώθησης για να αναπτυχθεί η εμπειρία παιχνιδιοπαίξης σας και να λαμβάνετε περισσότερες προσφορές. Ένα σημαντικό στοιχείο να record είναι ότι ο κωδικός προώθησης ισχύει μόνο μία φορά κατά τη διαδικασία εγγραφής ή κατά την κάθε εντολή ανανέωσης λογαριασμού, οπότε βεβαιωθείτε να τον χρησιμοποιείτε σωστά.
Παύλος, 25 ετών:
“Λαμβάνω προμόθετα στο Spinbara Casino κάθε τελώς εβδομάδα και είναι άριστα! Το χρήσιμο του κωδικού προώθησης είναι πολύ απλό, μπορείτε να το βρείτε εύκολα στη σελίδα του ιστότοπου και να εισάγετε κώδικα στο πεδίο κατά την εγγραφή ή στην σελίδα των προμοτριών. Τα προμόθετα που λαμβάνω είναι πολύ ωραία, έχω κερδίσει δωρεάν γύρους στον πιο popular slot του καζινό! Σίγουρα συνιστάω να χρησιμοποιήσετε τον κωδικό προώθησης για να παίξετε στο Spinbara Casino!”
Μαρία, 35 ετών:
“Έχω κάνει αναμélηση να δοκιμάσετε το Spinbara Casino και να χρησιμοποιήσετε τον κωδικό προώθησης κατά την εγγραφή σας! Τα προμόθετα είναι πολύ ευέλικτα και μπορείτε να χρησιμοποιήσετε τον κωδικό προώθησης για να πάρετε δωρεάν σπίν στον πιο διαδεδομένο slot του καζινό! Εγώ ήμουν ιδιαίτερα ευχάριστη με τις επιχειρηματικές προσφορές που ελάβα και θέλω να σας πω ότι το Spinbara Casino είναι ένα αξιόπιστο και ανεξάρτητο καζίνο για να παίξετε online στην Ελλάδα. Λαμβάνετε προμόθετα στο Spinbara Casino; Πώς να χρησιμοποιήσετε τον κωδικό προώθησης για να παίξετε καζίνο στο διαδίκτυο στην Ελλάδα, είναι πολύ εύκολο!»
Λαμβάνετε προμόθετα στο Spinbara Casino; Μπορείτε να χρησιμοποιήσετε έναν κωδικό προώθησης για να πάρετε προσφορές στο καζίνο του διαδίκτυου στην Ελλάδα.
Ο κωδικός προώθησης είναι μια σειρά αλφανumeric που πρέπει να εισάγετε κατά την εγγραφή ή κατά την κάθε είσοδο στο λογαριασμό σας.
Ένας τypical κωδικός προώθησης μπορεί να αποτελεστεί από λέξεις-κλειδί, αριθμούς ή μιxtures από αμφότερα.
Αν έχετε έναν κωδικό προώθησης, συμβουλευτικά εισάγετε τον στο πεδίο κωδικού προώθησης κατά την εγγραφή ή την κάθε είσοδο στο λογαριασμό σας, για να λαμβάνετε τις προσφορές που σας πρόκειται να περιλαμβάνει.